package cn.flying.cloud.file.core.service;

import java.io.InputStream;
import java.util.concurrent.TimeUnit;

import org.springframework.stereotype.Component;

import cn.flying.cloud.base.oss.exception.OssException;

/**
 * 对象存储服务实现类
 *
 * @author: admin
 * @date: 2025年02月28日 11:38
 * @version: 1.0
 */
@Component
public class OssServiceImpl extends AbstractOssService {

    /**
     * 创建bucket
     *
     * @param tenantId 租户ID
     * @param bucket   bucket名称
     * @return
     * @throws OssException
     */
    @Override
    public boolean createBucket(String tenantId, String bucket) throws OssException {
        return this.getTemplate(tenantId).createBucket(bucket);
    }

    /**
     * 上传文件
     *
     * @param tenantId   租户ID
     * @param bucket     bucket名称
     * @param objectName 对象名称
     * @param stream     文件流对象
     * @return
     * @throws OssException
     */
    @Override
    public String putObject(String tenantId, String bucket, String objectName, InputStream stream) throws OssException {
        return this.getTemplate(tenantId).putObject(bucket, objectName, stream);
    }

    /**
     * 获取文件对象
     *
     * @param tenantId   租户ID
     * @param bucket     bucket名称
     * @param objectName 对象名称
     * @return
     * @throws OssException
     */
    @Override
    public byte[] getObjectBytes(String tenantId, String bucket, String objectName) throws OssException {
        return this.getTemplate(tenantId).getObjectBytes(bucket, objectName);
    }

    /**
     * 获取对象的url
     *
     * @param tenantId   租户ID
     * @param bucket     bucket名称
     * @param objectName 对象名称
     * @param expiry     过期时间
     * @param timeUnit   时间单位
     * @return
     * @throws OssException
     */
    @Override
    public String getObjectUrl(String tenantId, String bucket, String objectName, Integer expiry, TimeUnit timeUnit) throws OssException {
        return this.getTemplate(tenantId).getObjectUrl(bucket, objectName, expiry, timeUnit);
    }
}

